﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Sistema_Totem.Logica.Clases;
using Sistema_Totem.Datos.SqlServer;
using System.Net;
using System.Text;
using System.Web.Security;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.Data.SqlClient;


namespace Sistema_Totem.Logica.Clases
{
    public class PdfErs
    {

        private List<string> secciones = new List<string>();
        private List<string> elementos = new List<string>();
        private List<string> historialll = new List<string>();
        private List<string> porta = new List<string>();
        private List<string> otras = new List<string>();
        private List<string> elementos2 = new List<string>();
        private string cliente;
        private string version;
        private string NombreProyecto;
        SqlServerErs sqlers = new SqlServerErs();

        /// <summary>
        /// metodo que genera un pdf al pasarle el nombre del proyecto
        /// </summary>
        /// <param name="Nombre">variable que contiene el nombre del proyecto</param>
        public void GenerarPdfErs(string Nombre)
        {

            NombreProyecto = Nombre;
            Document document = new Document();
            _events evento = new _events();            
            PdfWriter archivo = PdfWriter.GetInstance(document, new FileStream(AppDomain.CurrentDomain.BaseDirectory + "Pdf\\" + NombreProyecto + "_ERS.PDF", FileMode.Create));                       
            document.Open();
            bool header = true;
            //evento.OnStartPage(archivo,document,NombreProyecto);
            secciones = sqlers.SelectSeccionesFijadas(NombreProyecto.ToString());
            cliente = sqlers.NombreCliente(NombreProyecto.ToString());

            for (int y = 0; y < secciones.Count(); y++)
            {

                if (secciones[y].ToString() == "PORTADA")
                {
                    porta = sqlers.Selecthistorialelemento(NombreProyecto.ToString(), secciones[y].ToString());
                    version = sqlers.Version(NombreProyecto.ToString());
                    PdfPTable tabla2 = new PdfPTable(1);
                    tabla2.TotalWidth = 520f;
                    tabla2.LockedWidth = true;
                    float[] widthsw = new float[] { 1f };
                    tabla2.SetWidths(widthsw);
                    tabla2.HorizontalAlignment = 2;
                    tabla2.SpacingBefore = 20f;
                    tabla2.SpacingAfter = 30f;

                    PdfPCell proyectonom = new PdfPCell(new Phrase(cliente.ToString(), new Font(Font.FontFamily.HELVETICA, 18f, Font.NORMAL)));
                    PdfPCell proyectonom1 = new PdfPCell(new Phrase(" "));
                    PdfPCell proyectonom2 = new PdfPCell(new Phrase(" "));
                    PdfPCell proyectonom3 = new PdfPCell(new Phrase(" "));
                    PdfPCell proyectonom4 = new PdfPCell(new Phrase(" "));
                    PdfPCell proyectonom5 = new PdfPCell(new Phrase(" "));

                    PdfPCell proyectonom7 = new PdfPCell(new Phrase("Especificacion de requerimientos del sistema", new Font(Font.FontFamily.HELVETICA, 18f, Font.BOLD)));
                    PdfPCell proyectonom9 = new PdfPCell(new Phrase(" "));
                    PdfPCell proyectonom10 = new PdfPCell(new Phrase(" "));
                    PdfPCell proyectonom11 = new PdfPCell(new Phrase(" "));
                    PdfPCell proyectonom12 = new PdfPCell(new Phrase(" "));
                    PdfPCell proyectonom14 = new PdfPCell(new Phrase(" "));
                    PdfPCell proyectonom15 = new PdfPCell(new Phrase(" "));
                    PdfPCell proyectonom16 = new PdfPCell(new Phrase(" "));
                    PdfPCell proyectonom17 = new PdfPCell(new Phrase(" "));
                    PdfPCell proyectonom8 = new PdfPCell(new Phrase("Version " + version.ToString(), new Font(Font.FontFamily.HELVETICA, 14f, Font.BOLD)));

                    proyectonom.BorderWidthLeft = 0;
                    proyectonom.BorderWidthRight = 0;
                    proyectonom.HorizontalAlignment = 2;
                    proyectonom1.Border = 0;
                    proyectonom2.Border = 0;
                    proyectonom3.Border = 0;
                    proyectonom4.Border = 0;
                    proyectonom5.Border = 0;

                    proyectonom7.Border = 0;
                    proyectonom8.Border = 0;
                    proyectonom9.Border = 0;
                    proyectonom10.Border = 0;
                    proyectonom11.Border = 0;
                    proyectonom12.Border = 0;

                    proyectonom14.Border = 0;
                    proyectonom15.Border = 0;
                    proyectonom16.Border = 0;
                    proyectonom17.Border = 0;


                    proyectonom1.HorizontalAlignment = 2;
                    proyectonom2.HorizontalAlignment = 2;
                    proyectonom3.HorizontalAlignment = 2;
                    proyectonom4.HorizontalAlignment = 2;
                    proyectonom5.HorizontalAlignment = 2;

                    proyectonom7.HorizontalAlignment = 2;
                    proyectonom8.HorizontalAlignment = 2;
                    proyectonom9.HorizontalAlignment = 2;
                    proyectonom10.HorizontalAlignment = 2;

                    tabla2.AddCell(proyectonom);
                    tabla2.AddCell(proyectonom1);
                    tabla2.AddCell(proyectonom2);
                    tabla2.AddCell(proyectonom3);
                    tabla2.AddCell(proyectonom4);
                    tabla2.AddCell(proyectonom5);
                    tabla2.AddCell(proyectonom11);
                    tabla2.AddCell(proyectonom12);
                    tabla2.AddCell(proyectonom14);
                    tabla2.AddCell(proyectonom15);
                    tabla2.AddCell(proyectonom16);
                    tabla2.AddCell(proyectonom17);
                    for (int a = 0; a < porta.Count(); a++)
                    {
                        PdfPCell proyectonom6 = new PdfPCell(new Phrase(porta[a].ToString(), new Font(Font.FontFamily.HELVETICA, 18f, Font.BOLD)));
                        proyectonom6.Border = 0;
                        proyectonom6.HorizontalAlignment = 2;
                        tabla2.AddCell(proyectonom6);



                    }

                    tabla2.AddCell(proyectonom7);
                    tabla2.AddCell(proyectonom9);
                    tabla2.AddCell(proyectonom10);
                    tabla2.AddCell(proyectonom8);

                    document.Add(tabla2);



                }

                if (secciones[y].ToString() == "HISTORIAL DE REVISIONES")
                {

                    header = false;

                    document.NewPage();
                    evento.OnStartPage1(archivo, document, NombreProyecto);
                    //archivo.PageEvent = evento;
                    PdfPTable tabla5 = new PdfPTable(1);
                    tabla5.TotalWidth = 520f;
                    tabla5.LockedWidth = true;
                    float[] wid = new float[] { 1f };
                    tabla5.SetWidths(wid);
                    tabla5.HorizontalAlignment = 0;

                    tabla5.SpacingBefore = 20f;
                    tabla5.SpacingAfter = 30f;
                    PdfPCell historial = new PdfPCell(new Phrase(secciones[y].ToString(), new Font(Font.FontFamily.HELVETICA, 18f, Font.BOLD)));
                    historial.Border = 0;
                    historial.Colspan = 2;
                    historial.HorizontalAlignment = 1;
                    tabla5.AddCell(historial);
                    document.Add(tabla5);
                    //////////////////////////////////////////////////////////////////////////////////////////////////////////////7
                    PdfPTable tabla4 = new PdfPTable(4);
                    tabla4.TotalWidth = 520f;
                    tabla4.LockedWidth = true;
                    float[] widt = new float[] { 1f, 1f, 1f, 1f };
                    tabla4.SetWidths(widt);
                    tabla4.HorizontalAlignment = 0;

                    tabla4.SpacingBefore = 20f;
                    tabla4.SpacingAfter = 30f;
                    PdfPCell fechahis = new PdfPCell(new Phrase("Fecha"));
                    PdfPCell version1 = new PdfPCell(new Phrase("Version"));
                    PdfPCell descripcion = new PdfPCell(new Phrase("Descripcion"));
                    PdfPCell autor = new PdfPCell(new Phrase("Autor"));


                    fechahis.HorizontalAlignment = 0;
                    version1.HorizontalAlignment = 0;
                    descripcion.HorizontalAlignment = 0;
                    autor.HorizontalAlignment = 0;
                    tabla4.AddCell(fechahis);
                    tabla4.AddCell(version1);
                    tabla4.AddCell(descripcion);
                    tabla4.AddCell(autor);

                    historialll = sqlers.Selecthistorialelemento(NombreProyecto.ToString(), secciones[y].ToString());



                    for (int j = 0; j < historialll.Count(); j++)
                    {
                        PdfPCell lacelda = new PdfPCell(new Phrase(historialll[j].ToString()));


                        tabla4.AddCell(lacelda);

                    }





                    document.Add(tabla4);


                }

                if (secciones[y].ToString() == "TABLA DE CONTENIDO")
                {

                    document.NewPage();
                    evento.OnStartPage1(archivo, document, NombreProyecto);
                    PdfPTable tabla8 = new PdfPTable(1);
                    tabla8.TotalWidth = 520f;
                    tabla8.LockedWidth = true;
                    float[] wi = new float[] { 1f };
                    tabla8.SetWidths(wi);
                    tabla8.HorizontalAlignment = 0;
                    tabla8.SpacingBefore = 20f;
                    tabla8.SpacingAfter = 30f;
                    PdfPCell nomtabla = new PdfPCell(new Phrase(secciones[y].ToString(), new Font(Font.FontFamily.HELVETICA, 18f, Font.BOLD)));
                    nomtabla.HorizontalAlignment = 1;
                    nomtabla.Border = 0;
                    tabla8.AddCell(nomtabla);

                    otras = sqlers.SelectSeccionesFijadas(NombreProyecto.ToString());

                    for (int w = 0; w < otras.Count(); w++)
                    {
                        if ((otras[w].ToString() != "PORTADA") & (otras[w].ToString() != "HISTORIAL DE REVISIONES") & (otras[w].ToString() != "TABLA DE CONTENIDO"))
                        {
                            elementos2 = sqlers.SelectElementosSeccionErs(NombreProyecto.ToString(), otras[w].ToString());
                            PdfPCell prime = new PdfPCell(new Phrase(otras[w].ToString(), new Font(Font.FontFamily.HELVETICA, 10f, Font.NORMAL)));
                            PdfPCell blanco = new PdfPCell(new Phrase(" "));

                            prime.Border = 0;
                            blanco.Border = 0;
                            prime.HorizontalAlignment = 0;
                            tabla8.AddCell(blanco);

                            tabla8.AddCell(prime);

                            for (int t = 0; t < elementos2.Count(); t++)
                            {
                                PdfPCell primer = new PdfPCell(new Phrase("     " + elementos2[t].ToString(), new Font(Font.FontFamily.HELVETICA, 8f, Font.NORMAL)));
                                primer.Border = 0;
                                primer.HorizontalAlignment = 0;
                                primer.Colspan = 1;
                                tabla8.AddCell(primer);



                            }

                        }
                    }

                    document.Add(tabla8);
                }

                if ((secciones[y].ToString() != "PORTADA") & (secciones[y].ToString() != "HISTORIAL DE REVISIONES") & (secciones[y].ToString() != "TABLA DE CONTENIDO"))
                {
                    if (header)
                    {
                        archivo.PageEvent = evento;
                        header = false;
                    }
                    document.NewPage();
                    evento.OnStartPage1(archivo, document, NombreProyecto);
                    PdfPTable tabla6 = new PdfPTable(1);
                    tabla6.TotalWidth = 520f;
                    tabla6.LockedWidth = true;
                    float[] widt = new float[] { 1f };
                    tabla6.SetWidths(widt);
                    tabla6.HorizontalAlignment = 0;
                    tabla6.SpacingBefore = 20f;
                    tabla6.SpacingAfter = 30f;

                    elementos = sqlers.SelectContenidoNombre(NombreProyecto.ToString(), secciones[y].ToString());

                    PdfPCell lacelda0 = new PdfPCell(new Phrase(secciones[y].ToString(), new Font(Font.FontFamily.HELVETICA, 16f, Font.BOLD)));
                    lacelda0.Border = 0;
                    tabla6.AddCell(lacelda0);
                    for (int i = 0; i < elementos.Count; i++)
                    {

                        PdfPCell laceldal = new PdfPCell(new Phrase(elementos[i].ToString(), new Font(Font.FontFamily.HELVETICA, 14f, Font.BOLD)));
                        PdfPCell lacelda2 = new PdfPCell(new Phrase(elementos[i + 1].ToString()));
                        laceldal.Border = 0;

                        lacelda2.Border = 0;

                        tabla6.AddCell(laceldal);
                        tabla6.AddCell(lacelda2);
                        i++;

                    }

                    document.Add(tabla6);

                }

            }

            document.Close();

        }

    }
}